package com.yonyou.pmclouds.project.mapper;

import com.yonyou.pmclouds.basecom.dao.BaseMapper;
import com.yonyou.pmclouds.project.entity.ProjectRefVO;
import com.yonyou.pmclouds.project.entity.ProjectVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

@Mapper
public interface ProjectMapper extends BaseMapper<ProjectVO> {
    ProjectVO[] queryWithKeywordByManangerOrCreator(@Param("creator") String creator,
                                                    @Param("keywords") String[] keywords,
                                                    @Param("tenantid")String tenantid,
                                                    @Param("state") Byte state,
                                                    @Param("start") int start,
                                                    @Param("size") int size);

    int countWithKeywordByManangerOrCreator(@Param("creator") String creator,
                                            @Param("keywords") String[] keywords,
                                            @Param("tenantid")String tenantid,
                                            @Param("state") Byte state);

    ProjectRefVO[] queryRefVOByIds(String[] ids);

    ProjectVO[] queryVOByIds(@Param("pkProjectSet") Set<Set<String>> pkProjectSet);////


    /**
     * 查询是否相同租户存在相同编码的项目
     */
    int countWithCode(ProjectVO vo);

    /**
     * 查询是否相同租户存在相同名称的项目
     */
    int countWithName(ProjectVO vo);

    /**
     *
     * 方法功能描述：查询租户下的项目。
     *
     * <b>参数说明</b>
     * @param tenantid
     * @param state
     * @return
     * @author zhangwce
     * @time 2018年1月21日 下午7:32:36
     */
    ProjectVO[] queryProjectByTenant(
            @Param("tenantid")String tenantid,
            @Param("state") Byte state);

    /**
     * 查询租户、组织下的项目
     *
     * @param pkTenant
     * @param pkOrgs 为空时，查询租户下的项目
     * @param state
     * @return
     */
    ProjectVO[] queryPrjByOrgs(@Param("pkTenant") String pkTenant,
                               @Param("pkOrgs") String[] pkOrgs ,
                               @Param("state") Byte state);

    /**
     * 根据租户、组织获取项目参照
     * @param pkTenant
     * @param pkOrgs 为空时，查询该租户下的项目参照
     * @param state
     * @param start
     * @param size
     * @return
     */
    ProjectRefVO[] queryPrjRefByOrgsLimite(@Param("pkTenant") String pkTenant,
                                           @Param("pkOrgs") String[] pkOrgs ,
                                           @Param("states") Byte[] state,
                                           @Param("start") int start,
                                           @Param("size") int size);

    /**
     * 根据租户、组织获取项目参照
     * @param pkTenant
     * @param pkOrgs 为空时，查询该租户下的项目参照
     * @param state
     * @return
     */
    String[] queryPrjIdByOrgsLimite(@Param("pkTenant") String pkTenant,
                                           @Param("pkOrgs") String[] pkOrgs ,
                                           @Param("states") Byte[] state);

    /**
     * @Description: 根据租户和来源主键查询项目档案
     * @param: [tenantid, srcids]
     * @return: com.yonyou.pmclouds.project.entity.ProjectVO[]
     * @author: zhangwce
     * @Date: 2018/5/10
     */
    ProjectVO[] queryVOBySrcIds(@Param("tenantid")String tenantid,
                                @Param("srcids") String[] srcids);

    List<ProjectVO> queryProjectsByFuzzyName(@Param("fuzzyName") String fuzzyName, @Param("pkTenant") String pkTenant);

    /**
     * 查询该租户下友工程自制的项目
     * @param pkTenant
     * @return
     */
    ProjectVO[] queryPMCProject(@Param("pkTenant") String pkTenant);

    String[] searchProjectIdByTenantOrg(@Param("keyword") String keyword, @Param("pkTenant") String pkTenant, @Param("pkOrg") String pkOrg, @Param("state") Byte state);

    /**
     * 根据组织查项目
     */
    ProjectVO[] searchProjectIdByTenantOrgExt(@Param("tenantId") String tenantId, @Param("pkOrg") String pkOrg);

    String[] queryProjectIdsByOrgs(@Param("pkTenant") String pkTenant, @Param("orgIds") String[] orgIds);


    /**
     * 检验项目档案类型是否被引用
     */
    int quote(@Param("pkTenant") String pkTenant, @Param("code") String code, @Param("ids") String[] ids);

    /**
     * 统计同一组织下的项目编码(供从NC同步的项目档案使用)
     *
     * @return
     */
    int countCodeOfOrg(@Param("pkTenant") String pkTenant, @Param("code") String code, @Param("pkOrg") String pkOrg);

    ProjectVO queryBySrc(@Param("pkTenant") String pkTenant, @Param("pkSrc") String pkSrc);

    /**
     * 指标报表项目信息筛选
     * @param pkTenant
     * @param pkOrgs
     * @param projectTypes
     * @return
     */
    List<ProjectVO> queryProjectsByTypeAndOrgs(@Param("pkTenant") String pkTenant, @Param("pkOrg") String pkOrgs, @Param("projectTypes") String[] projectTypes,@Param("projectIds") String[] projectIds);

}
